package com.example.xmhds_1.mapper.account;

import com.example.xmhds_1.entity.UserAccount;
import org.apache.ibatis.annotations.*;

/**
 * 用户账号数据访问接口
 */
@Mapper
public interface UserAccountMapper {

    /**
     * 根据用户名查找用户
     * 只返回未删除的用户
     *
     * @param username 用户名
     * @return 用户信息，不存在返回null
     */
    @Select("SELECT * FROM user_account WHERE username = #{username} AND deleted = 0")
    UserAccount findByUsername(String username);
    /**
     * 登入功能
     * 根据用户名和密码查找用户
     * @param username 用户名
     * @param password 密码
     * @return 用户信息，不存在返回null
     */
    @Select("SELECT * FROM user_account WHERE username = #{username} AND password = #{password} AND deleted = 0")
    UserAccount login(String username, String password);
    /**
     * 检查用户名是否已存在
     * 只检查未删除的用户
     *
     * @param username 用户名
     * @return true表示已存在，false表示不存在
     */
    @Select("SELECT COUNT(*) FROM user_account WHERE username = #{username} AND deleted = 0")
    boolean checkUsernameExists(String username);

    /**
     * 插入新用户
     * 会自动设置id
     *
     * @param user 用户信息
     * @return 影响的行数
     */
    @Insert("INSERT INTO user_account (username, password, status, create_time, update_time) " +
            "VALUES (#{username}, #{password}, #{status}, #{createTime}, #{updateTime})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insert(UserAccount user);

    /**
     * 更新用户信息
     * 可更新密码、状态和更新时间
     *
     * @param user 用户信息
     * @return 影响的行数
     */
    @Update("UPDATE user_account SET " +
            "password = #{password}, " +
            "status = #{status}, " +
            "update_time = #{updateTime} " +
            "WHERE id = #{id}")
    int update(UserAccount user);
}
